package one.microstream.persistence.exceptions;

/*-
 * #%L
 * microstream-persistence
 * %%
 * Copyright (C) 2019 - 2022 MicroStream Software
 * %%
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 * 
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the Eclipse
 * Public License, v. 2.0 are satisfied: GNU General Public License, version 2
 * with the GNU Classpath Exception which is
 * available at https://www.gnu.org/software/classpath/license.html.
 * 
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 * #L%
 */

import one.microstream.chars.XChars;



public class PersistenceExceptionConsistencyUnknownObject extends PersistenceExceptionConsistency
{
	///////////////////////////////////////////////////////////////////////////
	// instance fields //
	////////////////////

	final Object object;



	///////////////////////////////////////////////////////////////////////////
	// constructors //
	/////////////////

	public PersistenceExceptionConsistencyUnknownObject(final Object object)
	{
		this(object, null, null);
	}

	public PersistenceExceptionConsistencyUnknownObject(
		final Object object,
		final String message
	)
	{
		this(object, message, null);
	}

	public PersistenceExceptionConsistencyUnknownObject(
		final Object object,
		final Throwable cause
	)
	{
		this(object, null, cause);
	}

	public PersistenceExceptionConsistencyUnknownObject(
		final Object object,
		final String message, final Throwable cause
	)
	{
		this(object, message, cause, true, true);
	}

	public PersistenceExceptionConsistencyUnknownObject(
		final Object object,
		final String message, final Throwable cause, final boolean enableSuppression, final boolean writableStackTrace
	)
	{
		super(message, cause, enableSuppression, writableStackTrace);
		this.object = object ;
	}



	///////////////////////////////////////////////////////////////////////////
	// getters //
	////////////

	public Object getObject()
	{
		return this.object;
	}


	///////////////////////////////////////////////////////////////////////////
	// override methods //
	/////////////////////

	@Override
	public String getMessage()
	{
		return "Unknown object: " + XChars.systemString(this.object)
			+ (super.getMessage() != null ? " Details: " + super.getMessage() : "")
		;
	}



}
